package com.cg.design.graphicdesignpattern.state;

/**
 * 表示“晚上”状态的类，实现了State接口
 *
 * @program: LeetCode->NightState
 * @description: 表示“晚上”状态的类，实现了State接口
 * @author: cg
 * @create: 2022-04-03 11:33
 **/
public class NightState implements State {

    /**
     * 单例模式
     */
    private static final NightState SINGLETON = new NightState();

    /**
     * 禁止创建实例
     */
    private NightState() {
    }

    /**
     * 获取唯一实例
     *
     * @return
     */
    public static State getInstance() {
        return SINGLETON;
    }

    @Override
    public void doClock(Context context, int hour) {
        // 如果时间参数为白天时间，切换为白天状态
        if (12 <= hour && hour < 13) {
            context.changeState(NoonState.getInstance());
        } else if (9 <= hour && hour < 17) {
            context.changeState(DayState.getInstance());
        }
    }

    @Override
    public void doUes(Context context) {
        context.callSecurityCenter("紧急：晚上使用金库！");
    }

    @Override
    public void doAlarm(Context context) {
        context.callSecurityCenter("按下警铃(晚上)");
        context.changeState(UrgentState.getInstance());
    }

    @Override
    public void doPhone(Context context) {
        context.recordLog("晚上的通话录音");
    }

    @Override
    public String toString() {
        return "[晚上]";
    }
}
